package com.xuan.configuration.properties.aliyun;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 阿里云对象存储
 */
@Data
@Slf4j
@Component
@ConfigurationProperties(prefix = "xuan.aliyun-oss")
public class Oss {

    /**
     * 端点
     */
    private String endpoint;
    /**
     * Bucket名称
     */
    private String bucketName;
    /**
     * 访问密钥ID
     */
    private String accessKeyId;
    /**
     * 密钥
     */
    private String accessKeySecret;
    /**
     * 域名前缀
     */
    private String http;

//********************************************************************************************************************************

    /**
     * 图片上传
     *
     * @param path 图片绝对路径
     * @return 图片域名
     */
    public String imageUpload(String path) throws Exception {

        // 1、构造FileInputStream
        FileInputStream inputStream;

        inputStream = new FileInputStream(path);

        // 2、拼接图片路径
        String filename = new SimpleDateFormat("yyyy/MM/dd").format(
                new Date()) + // 当前时间
                "/" + UUID.randomUUID() + // 随机文件名
                path.substring(path.lastIndexOf(".")); // 截取文件类型

        // 3、创建OSSClient实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 4、填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称
        ossClient.putObject(bucketName, filename, inputStream);

        // 5、关闭OSSClient
        ossClient.shutdown();

        // 6、返回图片域名
        return (http + filename);

    }


}
